Python教学记录
2018.2
Python 教学记录 01
使用资源
1,海龟学院(后面简称为网站)
2,Python自带的turtle模块
纠结
因为我最开始是用的这个网站循序渐进的教程入门的,学到了为了代码复用而使用函数层层封装代码的操作,而且Python自带的turtle模块并没有这种安排细致、由浅入深的教程,我也并没能在网上搜到类似的配合turtle模块的好教程。。
所以只好出此下策,以网站的进度为主,在Python中实现同样的操作为辅,先将就着,过两天有空再以turtle模块为主参考海龟学院的课程安排重新弄一份纯Python教程。
碰到的问题
网站的问题
问题和答案不灵活。
答案不灵活还可以把答案当作参考而忽略它,而问题不灵活就很影响进度了。幸好不是那种突然变难的跳跃,而是明显感觉到题目设置得不全不完整,必须要人为干涉,中途提出挑战性的新问题,以补充原网站的课程进度。
BUG
部分题目题目错或答案错。。。
turtle模块的问题
colormode()
更改笔的颜色时,color()/pencolor()方法源代码声明部分的文档说明不够详细,官方文档查到colormode(1.0/255)函数更改颜色模式,但这个方法在PyCharm中并没能自动补全。。
done()
turtle模块最不爽的一点就是不在画完后加done()函数就会陷入假死。。
课程进度的思考
和《Python编程:从入门到实践》这本书一样,turtle网站的进度很快就到了for循环的部分,我不太同意这种教学进度。。我更青睐《父与子的编程之旅》(原《和孩子一起学编程》)这本书里的进度安排。
所以,接下来我会参考后面那本书的进度:
首先利用各种比喻,搭建好基本的概念框架,然后给一些基础工具:
1,最好的Python IDE,PyCharm
2,基本的查询命令dir(),type(),dis()等。。
3,Chrome或360极速浏览器,翻译官方文档(找到过一些人工翻译的文档,但都内容不完整)。。
4,直接撸能即时且直观看到结果的GUI。。(GUI的梗:GUI很难,甚至会影响性格——忘了是哪位大牛说的。。)
在《Python核心编程》里找到了:
然后就是最重要的部分:
如何在不导致课程变得枯燥的前提下提出一些循序渐进的挑战?
可以参考上文说的《父子》一书,和前面那本《从入门到实践》的中间部分,用PyGame包制作游戏。
跑个题:游戏会让人越来越难以忍受延迟满足吗,既然它本身就是为了即时满足而设计和发展的?
趣事
航哥喜欢做笔记,试过为知笔记、有道云笔记、印象笔记之后,选择了颜值最高又免费的有道云笔记。。
我作为为知笔记的粉丝很不爽,但为知只有100天试用期,过期收费,否则笔记只能本地记录而不能同步到云端。。
Python 教学记录 02
进度
目前网站里的课程已经过完(两天就过完了。。),但同步到Python里的时候开始凸显问题。
由于网站使用的是某种不知名语法,和Python语法差异较大,还需要一些时间过渡和适应。估计要多拖几天,才能推进到后面的安排。。
Java
.java文件对应于.py
.class文件对应于.pyc文件,不同的是,python默认隐藏pyc字节码文件,特殊需求(如加密源代码时)才需要手动编译并显示。
当然不是我突然想学 Java 了。。而是想拉一位 Javaer 入 Python 坑,得有所准备。。。
Python 教学记录 03
授人以鱼不如授人以渔
试想中的方案实践效果很好。
尝试了一下基础工具+随时解释背后思想与逻辑:
基础工具
dir() 查看对象属性与方法
type() 查看对象所属类型
.doc 查看对象内置文档
有道词典
谷歌翻译
暂时还用不到官方文档
帮助的时机
鼓励尝试,不断试错
如何看懂报错代码的含义
类似函数或类型之间的对比。
各种OOP的比喻。。
dir(list)过了一遍的时候,不免要说说带双下划线的与不带双下划线的属性或方法之间的区别。。鼓励他自己尝试新建一个函数或类,然后同样用dir()函数查看,自己发现,印象肯定会深刻些。。
后面的安排
接亲与酒席耽搁几天。。
str字符串类型留着有机会再看。。这个最好和转义符号和re模块(正则表达式)一起研究。。
dict字典这个以后做项目的过程中再看。。哪些数据适合用字典?哪些适合用列表?需要让他自己尝试。
底层实现
最好是等什么时候他自己对底层实现有所好奇的时候再说。。(知乎)不少大牛认为应该从底层学起,6岁就上C语言,以后再学高级语言,我的看法正好相反。。
高级语言更符合人类的思维逻辑,而不是计算机的逻辑,学起来比C语言简单。我们一代代人的努力,更多是为了让他们站在我们的肩膀上,离月亮会更近一点。底层肯定是要学的,只是要拖后一点。
所以目前打算是只单方面做一些准备,好到时候层层深入底层。例如dis模块,dis.dis()反编译,查看代码块的字节码层面(与汇编语言很像)。。三体人肉计算机的隐喻,以任意事物实现计算机的方法,原因。。普通计算机上二进制对状态的表示与计算,量子计算机量子态如何表示状态并计算。。我们所处世界是否是被模拟出来的?能否分辨?为什么?(哲♂学的入门~~~)
有趣的过程
这样的学习方法应该很有趣,等他dir()之后,那些非Python内置属性的方法,先让他自己查词典并猜测这个函数的功能,然后实验,然后我再根据函数之间的联系提问,例如前面提到的,类似函数之间的对比,如sort, sorted; append, extend; count, index;不同类型对象之间的相似之处 list, str...
还有就是根据Pycharm提示的参数类型,来猜测应该如何选择传入参数,遇到个坑iterable可迭代类型。。
不适合一对多教学
这种教学方式貌似只能一对一。。没办法,要追求最大学习效率只能这样。。
Python 教学记录 04
进度
str方法、re模块和regix正则表达式
回家的几个小时,尝试了一下regix和str方法结合,但反馈效果不好,很枯燥,暂时先不管,以后用到的时候再来。。
(回家的路上遇到一个插曲,猫咪谈到算命,大肆吹捧,张贝竟也应声,我发了点脾气,话说重了点。。不过对于讲迷信那套的,管他是谁,先dis全套,再上逻辑: 鬼→信则有不信则无→自己吓自己。算命→信则灵不信则不灵→自己催眠自己。)
教学的方式:
在B站上找到的一个youtube视频,里面介绍的一个学习正则表达式的网站,很直观方便,唯一的不好就是全英文,对于初中生来说还是有点难。。
str内置方法和Python自带re模块
尝试了一个匹配操作,但只能返回一个匹配项,懒得研究了,先丢这里。。
数学基本运算
过了一遍各种运算,当然,用的是我的「逗比猜测法」。。
先不说这个操作符是啥意思,全靠尝试和猜测。。过程笑死我了。。
准备开始游戏项目
在撸了几个函数,K掉几个编程书上的题目,又给自己的一个数学寒假作业题建模写成函数之后,航哥跃跃欲试准备做游戏了。。
准备先从无GUI界面的游戏开始。。直接上GUI我怕有点Hold不住(前端是个大坑)。。
时间和精力
我有点低估了这种教学方式的精力投入。。本以为可以至少教4、5个,结果貌似能教一两个就不错了。。
Python 教学记录 05
进度
init,self
变量作用域(全局/局部变量,class/实例变量)
while循环,try,except,else,input
结合已经用过几次的random模块,航哥成功从零制作出一个命令行猜数游戏(事先只是我口述项目需求,并未参考任何代码),对比书上的代码,发现不一样:
航哥的代码包含考虑到用户输入非整数的情形,包含try语句,后面的判断逻辑更清晰易读。
看别人代码时,提及Python核心思想第二句:
it's just a name
(第一句是 everything is object)
下一步安排
上 GUI 了。。直接 PyGame?感觉没必要从其他 GUI 模块或 package 过渡。。但是否跨度有点大?
Python 教学记录 06
进度
昨天试过用函数封装一块代码,今天又试了下把函数放在其他文件跨文件调用。
封装的是用来检测用户输入的代码块,以后每次需要用到这个功能时只需要调用写好的函数就行了。果然马上就用到了。。
把以前做过的两个命令行程序用easygui实现了。这是航哥在只用到了dir(),然后尝试不同box函数的参数,一些难点的单词查了下词典,连内置文档都没查阅的情况下做到的。。
(函数放在别处,print换成return的过程拖了较长时间。。我一直尽量不直接解释,而是让他自己在console里用type()尝试和查看。。)
航哥对底层实现突然感兴趣,于是参考我过去看的《编码》这本书和可汗学院上面的信息论视频教程,先让他自己参考表格用xmind画了个摩尔斯电码二叉树。
尝试给一个hello的音频,能准确翻译。。明天如果他还想了解底层,估计得说说逻辑门了。。
难点
try或者if判断语句不止一层的话会很难理清逻辑。。以前用程序框图,也画过分支图,还是效果不好。。怕是这个得缓一些时间再说。。
跨文件调用函数时,由于代码不在一起,容易被对象指向的实际 object 和 type 弄晕。。今天为止至少是第三次让他单独在 console 里查 type 了。。
计划
每次两三个小时的课程之后都没有留作业,有时候我没时间远程,时间间隔长了容易忘记一些东西。。计划以后每次设计几个课后作业。。
仅供参考
以我的计算机和英语基础,我花了半年入门。
学过代数但尚未学函数的初二的程航,至少得一个月才能熟悉一些东西,没有乐观到指望他能完全弄懂。
Python 教学记录 07
进度
由于没达到预期的效果,只好暂时先多制作几个 GUI 程序,熟悉各个方面。
截自《Python核心编程》
计划
接下来有两个方向
一个是向上抽象,直接用Pygame开始做游戏。
一个是向下深入,尝试对象更多更细致的GUI库/模块。
看情况吧。。
Python 教学记录 08
进度
果然还是选择了PyGame...
参考的《Python从入门到实践》里的内容。。
随着代码变多,各种封装调用越来越多,航哥曾经常用的 a = xxx 式命名法不够用了,竟然无视PEP8,用上了拼音和中文。。算了,先这样吧。。
关于类的构造函数__init__和self指针先放着,今天的几个小时实在不可能深入。对了,新接触到tuple()类型,对比list,tuple一旦创建无法修改——当然,只需要dir()一下便可以推出这个结论而无需任何文档说教。
相比前几天,如今突然问某句代码的含义基本能回答上来了。。除了console,也开始用上百度了。。
计划
如今已经不急着推进进度了,就这样慢慢熟悉接触一个模块,认识它,了解如何使用它,渐渐地去熟悉这个过程背后的方法和思想。
Python 教学记录 09
进度
航哥儿对制作软件游戏这种工程向的活干腻了,我只好拿出镇店之宝——信息竞赛题。。
参考的《算法竞赛入门经典》这本书。。
果然,航哥儿甚是欢喜,三个多小时的刷题后约定明日再战。。
由于该书使用C语言,航哥儿用Python写的代码对比下来甚是简洁漂亮,不由得对Python更为喜欢。
期间遇到Python一个问题,除法操作返回的是浮点数。。最后分步推理下使用其他判断语句曲线救国。。
验证答案的过程中发现PyCharm一个问题,在同时打开两个Python Console的情况下,如果其中一个在跑程序,另一个可能无法同时再跑一个带有相同变量名的程序。。
计划
航哥儿兴趣转向信息竞赛题,我突然轻松了不少,不需要研究各种包和模块,只需要在他解题过程中稍稍提示,和继续日常的各种苏格拉底式追问就行了。。
Python 教学记录 10 ( end )
进度
除了算法书,还准备参考欧拉计划这个网站上的题目。leetcode暂时不考虑。。那个太难了点。。
今天时间不太够,之前有事耽搁,之后又有事不得不早退。。只做了一道题。
使用数学公式确实会让代码更简洁有逼格,但也让他尝试了纯粹用逻辑来判断和计算,这种代码毕竟占多数。。
本质上,其实这是在用编程解数学题,学的是数学,编程语言反而成了次要的工具。
停更
没什么好记录的了。。无非就是用Python编程解数学题,我需要做的只是寻找平滑学习曲线的题目,和少量的指导。
我也有了更多时间和精力投入在其他地方,例如各种AI相关的库。。毕竟我学Python就是为了人工智能。。
因为,实在厌倦了人类。